#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
数据合并脚本
将处理过的指标文件合并为一个Excel文件

用法:
    python merge_indicators.py [选项]
"""

import os
import sys
import argparse
import logging
import pandas as pd
import json
from pathlib import Path

def setup_logging(log_file=None):
    """
    设置日志系统
    
    参数:
        log_file: 日志文件路径，如果不提供则只输出到控制台
    """
    # 创建日志器
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    # 创建控制台处理器
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
    
    # 创建文件处理器（如果提供了日志文件）
    if log_file:
        file_handler = logging.FileHandler(log_file, encoding='utf-8')
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s [%(filename)s:%(lineno)d]'))
    else:
        file_handler = None
    
    # 添加处理器到日志器
    handlers = [console_handler]
    if log_file:
        handlers.append(file_handler)
    
    logger.handlers.clear()
    for handler in handlers:
        logger.addHandler(handler)
    
    return logger

def get_country_mapping(country_mapping_file="country_mapping.json"):
    """
    从文件中获取国家映射关系
    
    参数:
        country_mapping_file: 国家映射文件路径
        
    返回:
        国家代码到名称的字典
    
    抛出:
        FileNotFoundError: 如果文件不存在
        ValueError: 如果文件格式无效
    """
    # 检查文件是否存在
    if not os.path.exists(country_mapping_file):
        raise FileNotFoundError(f"未找到国家映射文件: {country_mapping_file}")
    
    # 尝试多种文件格式
    if country_mapping_file.endswith('.json'):
        with open(country_mapping_file, 'r', encoding='utf-8') as f:
            try:
                return json.load(f)
            except json.JSONDecodeError:
                raise ValueError("JSON文件格式无效")
    
    elif country_mapping_file.endswith('.csv'):
        try:
            df = pd.read_csv(country_mapping_file)
            return dict(zip(df['code'], df['name']))
        except KeyError:
            raise ValueError("CSV文件格式无效，缺少必要的'code'和'name'列")
    
    raise ValueError(f"不支持的国家映射文件格式: {country_mapping_file}")

def merge_indicator_files(indicator_dir, output_file, country_mapping_file=None):
    """
    合并指标文件
    
    参数:
        indicator_dir: 指标文件目录
        output_file: 输出文件路径
        country_mapping_file
